weld SvxMainMenuOrganizerDialog
Change-Id: I157dc8054e3bd0055cc52f7c9a80066026b7033d
Reviewed-on: https://gerrit.libreoffice.org/54424
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 9f4e232..dd9fb7e 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -320,13 +320,13 @@
if (sIdent == "gear_add")
{
VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
nullptr, GetSaveInData()->GetEntries(), nullptr, true );
SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(),
GetSaveInData()->GetEntries(), nullptr, true );
if ( pDialog->Execute() == RET_OK )
if (aDialog.run() == RET_OK)
{
GetSaveInData()->SetEntries( pDialog->ReleaseEntries() );
ReloadTopLevelListBox( pDialog->GetSelectedEntry() );
GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
ReloadTopLevelListBox(aDialog.GetSelectedEntry());
GetSaveInData()->SetModified();
}
}
@@ -363,12 +363,11 @@
{
SvxConfigEntry* pMenuData = GetTopLevelSelection();
VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
this, GetSaveInData()->GetEntries(), pMenuData, false );
if ( pDialog->Execute() == RET_OK )
SvxMainMenuOrganizerDialog aDialog(GetFrameWeld(), GetSaveInData()->GetEntries(),
pMenuData, false );
if (aDialog.run() == RET_OK)
{
GetSaveInData()->SetEntries( pDialog->ReleaseEntries() );
GetSaveInData()->SetEntries(aDialog.ReleaseEntries());
ReloadTopLevelListBox();
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 6070a7b..be9d406 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -1884,18 +1884,18 @@
}
SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
vcl::Window* pParent, SvxEntries* entries,
weld::Window* pParent, SvxEntries* entries,
SvxConfigEntry const * selection, bool bCreateMenu )
: ModalDialog(pParent, "MoveMenuDialog", "cui/ui/movemenu.ui")
: GenericDialogController(pParent, "cui/ui/movemenu.ui", "MoveMenuDialog")
, mpEntries(nullptr)
, bModified(false)
, m_xMenuBox(m_xBuilder->weld_widget("namebox"))
, m_xMenuNameEdit(m_xBuilder->weld_entry("menuname"))
, m_xMenuListBox(m_xBuilder->weld_tree_view("menulist"))
, m_xMoveUpButton(m_xBuilder->weld_button("up"))
, m_xMoveDownButton(m_xBuilder->weld_button("down"))
{
get(m_pMenuBox, "namebox");
get(m_pMenuNameEdit, "menuname");
get(m_pMoveUpButton, "up");
get(m_pMoveDownButton, "down");
get(m_pMenuListBox, "menulist");
m_pMenuListBox->set_height_request(m_pMenuListBox->GetTextHeight() * 12);
m_xMenuListBox->set_size_request(-1, m_xMenuListBox->get_height_rows(12));
// Copy the entries list passed in
if ( entries != nullptr )
@@ -1903,14 +1903,12 @@
mpEntries.reset( new SvxEntries );
for (auto const& entry : *entries)
{
SvTreeListEntry* pLBEntry =
m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( entry->GetName() ) );
pLBEntry->SetUserData(entry);
m_xMenuListBox->append(OUString::number(reinterpret_cast<sal_uInt64>(entry)),
SvxConfigPageHelper::stripHotKey(entry->GetName()), "");
mpEntries->push_back(entry);
if (entry == selection)
{
m_pMenuListBox->Select( pLBEntry );
m_xMenuListBox->select(m_xMenuListBox->n_children() - 1);
}
}
}
@@ -1929,70 +1927,54 @@
pNewEntryData->SetUserDefined();
pNewEntryData->SetMain();
pNewMenuEntry =
m_pMenuListBox->InsertEntry( SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() ) );
m_pMenuListBox->Select( pNewMenuEntry );
pNewMenuEntry->SetUserData( pNewEntryData );
m_sNewMenuEntryId = OUString::number(reinterpret_cast<sal_uInt64>(pNewEntryData));
m_xMenuListBox->append(m_sNewMenuEntryId,
SvxConfigPageHelper::stripHotKey(pNewEntryData->GetName()), "");
m_xMenuListBox->select(m_xMenuListBox->n_children() - 1);
if (mpEntries)
mpEntries->push_back(pNewEntryData);
m_pMenuNameEdit->SetText( newname );
m_pMenuNameEdit->SetModifyHdl(
LINK( this, SvxMainMenuOrganizerDialog, ModifyHdl ) );
m_xMenuNameEdit->set_text(newname);
m_xMenuNameEdit->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, ModifyHdl));
}
else
{
pNewMenuEntry = nullptr;
// hide name label and textfield
m_pMenuBox->Hide();
m_xMenuBox->hide();
// change the title
SetText( CuiResId( RID_SVXSTR_MOVE_MENU ) );
m_xDialog->set_title(CuiResId(RID_SVXSTR_MOVE_MENU));
}
m_pMenuListBox->SetSelectHdl(
LINK( this, SvxMainMenuOrganizerDialog, SelectHdl ) );
m_xMenuListBox->connect_changed(LINK(this, SvxMainMenuOrganizerDialog, SelectHdl));
m_pMoveUpButton->SetClickHdl (
LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) );
m_pMoveDownButton->SetClickHdl (
LINK( this, SvxMainMenuOrganizerDialog, MoveHdl) );
m_xMoveUpButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl));
m_xMoveDownButton->connect_clicked(LINK( this, SvxMainMenuOrganizerDialog, MoveHdl));
}
SvxMainMenuOrganizerDialog::~SvxMainMenuOrganizerDialog()
{
disposeOnce();
}
void SvxMainMenuOrganizerDialog::dispose()
{
m_pMenuBox.clear();
m_pMenuNameEdit.clear();
m_pMenuListBox.clear();
m_pMoveUpButton.clear();
m_pMoveDownButton.clear();
ModalDialog::dispose();
}
IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, Edit&, void)
IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, ModifyHdl, weld::Entry&, void)
{
// if the Edit control is empty do not change the name
if (m_pMenuNameEdit->GetText().isEmpty())
if (m_xMenuNameEdit->get_text().isEmpty())
{
return;
}
SvxConfigEntry* pNewEntryData =
static_cast<SvxConfigEntry*>(pNewMenuEntry->GetUserData());
SvxConfigEntry* pNewEntryData = reinterpret_cast<SvxConfigEntry*>(m_sNewMenuEntryId.toUInt64());
pNewEntryData->SetName(m_xMenuNameEdit->get_text());
pNewEntryData->SetName(m_pMenuNameEdit->GetText());
m_pMenuListBox->SetEntryText( pNewMenuEntry, pNewEntryData->GetName() );
const int nNewMenuPos = m_xMenuListBox->find_id(m_sNewMenuEntryId);
const int nOldSelection = m_xMenuListBox->get_selected_index();
m_xMenuListBox->remove(nNewMenuPos);
m_xMenuListBox->insert(nNewMenuPos, m_sNewMenuEntryId, pNewEntryData->GetName(), "");
m_xMenuListBox->select(nOldSelection);
}
IMPL_LINK_NOARG( SvxMainMenuOrganizerDialog, SelectHdl, SvTreeListBox*, void )
IMPL_LINK_NOARG(SvxMainMenuOrganizerDialog, SelectHdl, weld::TreeView&, void)
{
UpdateButtonStates();
}
@@ -2000,71 +1982,46 @@
void SvxMainMenuOrganizerDialog::UpdateButtonStates()
{
// Disable Up and Down buttons depending on current selection
SvTreeListEntry* selection = m_pMenuListBox->GetCurEntry();
SvTreeListEntry* first = m_pMenuListBox->First();
SvTreeListEntry* last = m_pMenuListBox->Last();
m_pMoveUpButton->Enable( selection != first );
m_pMoveDownButton->Enable( selection != last );
const int nSelected = m_xMenuListBox->get_selected_index();
m_xMoveUpButton->set_sensitive(nSelected > 0);
m_xMoveDownButton->set_sensitive(nSelected != -1 && nSelected < m_xMenuListBox->n_children() - 1);
}
IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, Button *, pButton, void )
IMPL_LINK( SvxMainMenuOrganizerDialog, MoveHdl, weld::Button&, rButton, void )
{
SvTreeListEntry *pSourceEntry = m_pMenuListBox->FirstSelected();
SvTreeListEntry *pTargetEntry = nullptr;
if ( !pSourceEntry )
{
int nSourceEntry = m_xMenuListBox->get_selected_index();
if (nSourceEntry == -1)
return;
}
if (pButton == m_pMoveDownButton)
int nTargetEntry;
if (&rButton == m_xMoveDownButton.get())
{
pTargetEntry = SvTreeListBox::NextSibling( pSourceEntry );
nTargetEntry = nSourceEntry + 1;
}
else if (pButton == m_pMoveUpButton)
else
{
// Move Up is just a Move Down with the source and target reversed
pTargetEntry = pSourceEntry;
pSourceEntry = SvTreeListBox::PrevSibling( pTargetEntry );
nTargetEntry = nSourceEntry - 1;
}
if ( pSourceEntry != nullptr && pTargetEntry != nullptr )
{
SvxConfigEntry* pSourceData =
static_cast<SvxConfigEntry*>(pSourceEntry->GetUserData());
SvxConfigEntry* pTargetData =
static_cast<SvxConfigEntry*>(pTargetEntry->GetUserData());
OUString sId = m_xMenuListBox->get_id(nSourceEntry);
OUString sEntry = m_xMenuListBox->get_text(nSourceEntry);
m_xMenuListBox->remove(nSourceEntry);
m_xMenuListBox->insert(nTargetEntry, sId, sEntry, "");
m_xMenuListBox->select(nTargetEntry);
SvxEntries::iterator iter1 = mpEntries->begin();
SvxEntries::iterator iter2 = mpEntries->begin();
SvxEntries::const_iterator end = mpEntries->end();
bModified = true;
// Advance the iterators to the positions of the source and target
while (*iter1 != pSourceData && ++iter1 != end) ;
while (*iter2 != pTargetData && ++iter2 != end) ;
// Now swap the entries in the menu list and in the UI
if ( iter1 != end && iter2 != end )
{
std::swap( *iter1, *iter2 );
m_pMenuListBox->GetModel()->Move( pSourceEntry, pTargetEntry );
m_pMenuListBox->MakeVisible( pSourceEntry );
bModified = true;
}
}
if ( bModified )
{
UpdateButtonStates();
}
UpdateButtonStates();
}
SvxConfigEntry* SvxMainMenuOrganizerDialog::GetSelectedEntry()
{
return static_cast<SvxConfigEntry*>(m_pMenuListBox->FirstSelected()->GetUserData());
const int nSelected(m_xMenuListBox->get_selected_index());
if (nSelected == -1)
return nullptr;
return reinterpret_cast<SvxConfigEntry*>(m_xMenuListBox->get_id(nSelected).toUInt64());
}
SvxConfigEntry::SvxConfigEntry( const OUString& rDisplayName,
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index 63f6bf2..6e6e158 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -491,30 +491,29 @@
OUString GetSelectedDisplayName();
};
class SvxMainMenuOrganizerDialog : public ModalDialog
class SvxMainMenuOrganizerDialog : public weld::GenericDialogController
{
VclPtr<VclContainer> m_pMenuBox;
VclPtr<Edit> m_pMenuNameEdit;
VclPtr<SvTreeListBox> m_pMenuListBox;
VclPtr<PushButton> m_pMoveUpButton;
VclPtr<PushButton> m_pMoveDownButton;
std::unique_ptr<SvxEntries> mpEntries;
SvTreeListEntry* pNewMenuEntry;
OUString m_sNewMenuEntryId;
bool bModified;
std::unique_ptr<weld::Widget> m_xMenuBox;
std::unique_ptr<weld::Entry> m_xMenuNameEdit;
std::unique_ptr<weld::TreeView> m_xMenuListBox;
std::unique_ptr<weld::Button> m_xMoveUpButton;
std::unique_ptr<weld::Button> m_xMoveDownButton;
void UpdateButtonStates();
DECL_LINK( MoveHdl, Button *, void );
DECL_LINK( ModifyHdl, Edit&, void );
DECL_LINK( SelectHdl, SvTreeListBox*, void );
DECL_LINK(MoveHdl, weld::Button&, void);
DECL_LINK(ModifyHdl, weld::Entry&, void);
DECL_LINK(SelectHdl, weld::TreeView&, void);
public:
SvxMainMenuOrganizerDialog (
vcl::Window*, SvxEntries*,
SvxConfigEntry const *, bool bCreateMenu );
SvxMainMenuOrganizerDialog(
weld::Window*, SvxEntries*,
SvxConfigEntry const *, bool bCreateMenu);
virtual ~SvxMainMenuOrganizerDialog() override;
virtual void dispose() override;
std::unique_ptr<SvxEntries> ReleaseEntries() { return std::move(mpEntries);}
SvxConfigEntry* GetSelectedEntry();
diff --git a/cui/uiconfig/ui/movemenu.ui b/cui/uiconfig/ui/movemenu.ui
index 9ac57e7..fdeb1ee 100644
--- a/cui/uiconfig/ui/movemenu.ui
+++ b/cui/uiconfig/ui/movemenu.ui
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
<requires lib="gtk+" version="3.18"/>
<!-- interface-requires LibreOffice 1.0 -->
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -13,11 +12,22 @@
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
<!-- column-name id -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkDialog" id="MoveMenuDialog">
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="title" translatable="yes" context="movemenu|MoveMenuDialog">New Menu</property>
<property name="type_hint">dialog</property>
<child>
<placeholder/>
</child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
@@ -99,10 +109,10 @@
<object class="GtkLabel" id="menunameft">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="movemenu|menunameft">Menu name:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">menuname</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@@ -111,61 +121,11 @@
</packing>
</child>
<child>
<object class="GtkBox" id="box6">
<object class="GtkEntry" id="menuname">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="spacing">12</property>
<child>
<object class="GtkEntry" id="menuname">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage" id="up1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-up</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="down1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-go-down</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<property name="activates_default">True</property>
</object>
<packing>
<property name="expand">False</property>
@@ -192,9 +152,9 @@
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" context="movemenu|label1">Menu _position:</property>
<property name="use_underline">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@@ -210,13 +170,36 @@
<property name="vexpand">True</property>
<property name="spacing">12</property>
<child>
<object class="svtlo-SvTreeListBox" id="menulist:border">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="Tree List-selection1"/>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="menulist">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="vexpand">True</property>
<property name="model">liststore1</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
@@ -238,6 +221,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image1</property>
<property name="always_show_image">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="up-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="movemenu|up-atkobject">Up</property>
@@ -256,6 +240,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image2</property>
<property name="always_show_image">True</property>
<child internal-child="accessible">
<object class="AtkObject" id="down-atkobject">
<property name="AtkObject::accessible-name" translatable="yes" context="movemenu|down-atkobject">Down</property>